package com.youmu.sichuansfc.service;

import com.youmu.sichuansfc.domain.YoumuFundManager;
import com.youmu.sichuansfc.domain.YoumuFundManagerFund;
import com.youmu.sichuansfc.domain.YoumuFundUser;
import com.youmu.sichuansfc.domain.pojo.SearchYoumuFundManagerFund;
import com.youmu.sichuansfc.dto.PageT;
import com.youmu.sichuansfc.dto.fund.FundManagerDto;
import com.youmu.sichuansfc.dto.fund.FundManagerFundDto;

import java.util.Calendar;
import java.util.List;

/**
 *  私募基金管理人
 */
public interface FundManagerService {

    /**
     *  查询私募基金
     * @param status 0 正常；-1被禁用
     * @param fundName 基金名
     * @return
     */
    public PageT findBy(Integer status, String fundName,  int num, int size);


    /**
     *  上传基金管理人信息
     * @param fundManagerDto
     * @return
     */
    public YoumuFundManager uploadFundManager(FundManagerDto fundManagerDto, long fundUserId) throws Exception;

    /**
     *  根据管理人名称查询
     * @param name
     */
    public YoumuFundManager findByManagerName(String name);

    /**
     *  查询改账户下所有基金信息
     * @param fundUserId
     * @return
     */
    public List<FundManagerDto> findByFundUserId(long fundUserId);

    /**
     *  通过ID 查询单个基金管理人详情
     * @param fundManagerId
     * @return
     */
    public FundManagerDto findById(long fundUserId , Long fundManagerId);


    /**
     * 判断该基金管理人 是否在改账户下 并返回该管理人信息
     * @param fundUserId
     * @param fundManagerId
     * @return
     */
    public YoumuFundManager checkFundUserManager(Long fundUserId, Long fundManagerId);

    /**
     *  基金管理人上传基金 <br></br>
     *  <mark>先判断基金管理人与登录用户关系</mark>
     * @param fundUserId
     * @param fundManagerFundDto
     * @return
     */
    public YoumuFundManagerFund uploadFund(Long fundUserId, FundManagerFundDto fundManagerFundDto) throws Exception;



    /**
     * 查询该基金详情
     * @param youmuFundUser  基金管理人
     * @param fundManagerFundId  ID
     * @return
     */
    public YoumuFundManagerFund findFund(YoumuFundUser youmuFundUser, Long fundManagerFundId);

    /**
     *  根据 类型 和管理人名 查询基金管理人
     * @param investType 投资类型 1 私募证券投资基金管理人；2 私募股权、创业投资基金管理人； 3 其他私募投资基金管理人
     * @param fundManagerName
     * @param num
     * @param size
     * @return
     */
    public PageT funManagers(Integer investType, String fundManagerName, int num, int size);


    /**
     *  通过Id 查询 基金管理人信息
     * @param fundManagerId
     * @return
     */
    public FundManagerDto findmanagerById(Long fundManagerId);

    /**
     *  后台 拉取所有基金列表
     * @param fundType 基金类型：1私募证券投资基金；2 私募股权、创业投资基金；3其他投资基金
     * @param searchName  私募基金管理人名称/ 私募基金名称
     * @param num
     * @param size
     * @return
     */
    public PageT searchFund(Integer fundType, String searchName, int num, int size);


    /**
     * 后台通过Id 查询该基金详情
     * @param fundId
     * @return
     */
    public SearchYoumuFundManagerFund findFundById(Long fundId);

    /**
     *  查询管理人旗下所有基金
     * @param managerId
     * @return
     */
    public List<YoumuFundManagerFund> findByManagerId(Long managerId);

    /**
     *  查询时间段类新增的私募管理人
     * @param startTime
     * @param endTime
     * @return
     */
    public List<YoumuFundManager> findByTime(Calendar startTime, Calendar endTime);

    SearchYoumuFundManagerFund findFundByName(String name);

    /**
     *  查询改 用户下 所有基金管理人历史
     * @param youmuFundUser
     * @param num
     * @param size
     * @return
     */
    PageT funManagersByUser(YoumuFundUser youmuFundUser, int num, int size);

    /**
     *  通过fundUserId 查询旗下所有基金列表
     * @param fundUserId
     * @param num
     * @param size
     * @return
     */
    PageT findFundListByFundUserId(Long fundUserId, int num, int size);

    /**
     *  拉去单个基金的历史
     * @param fundUserId
     * @param num
     * @param size
     * @param fundId
     * @return
     */
    PageT findHistoryByFundUserId(Long fundUserId, int num, int size, Long fundId);
}

